package com.doujiang.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.doujiang.domain.Movie;
import com.doujiang.domain.dto.HotMovieDTO;
import com.doujiang.domain.dto.MovieDTO;
import com.doujiang.domain.dto.ReviewStatsDTO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 电影Mapper接口
 * 
 * @author 王伟舰
 * @date 2025-07-19
 */
@Repository
@Mapper
public interface MovieMapper extends BaseMapper<Movie>
{
    /**
     * 查询电影
     * 
     * @param id 电影主键
     * @return 电影
     */
    public Movie selectMovieById(Long id);

    /**
     * 查询电影列表
     * 
     * @param movie 电影
     * @return 电影集合
     */
    public List<Movie> selectMovieList(Movie movie);

    /**
     * 新增电影
     * 
     * @param movie 电影
     * @return 结果
     */
    public int insertMovie(Movie movie);

    /**
     * 修改电影
     * 
     * @param movie 电影
     * @return 结果
     */
    public int updateMovie(Movie movie);

    /**
     * 删除电影
     * 
     * @param id 电影主键
     * @return 结果
     */
    public int deleteMovieById(Long id);

    /**
     * 批量删除电影
     * 
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteMovieByIds(Long[] ids);

    /**
     * 获取热门电影（按评论数排序）
     * 
     * @param limit 限制数量
     * @return 热门电影列表
     */
    public List<HotMovieDTO> getHotMovies(@Param("limit") Integer limit);

    /**
     * 获取影评统计数据
     * 
     * @return 统计数据
     */
    public ReviewStatsDTO getReviewStats();


    //刘跃的

    /**
     * 查询电影列表
     *
     * @param movieDTO 电影
     * @return 电影集合
     */
    public List<MovieDTO> selectMovieList(MovieDTO movieDTO);

    /**
     * 查询热门电影列表
     *
     * @param movieDTO 电影
     * @return 电影集合
     */
    public List<MovieDTO> selectHotMovieList(MovieDTO movieDTO);

    /**
     * 查询最新电影列表
     *
     * @param movieDTO 电影
     * @return 电影集合
     */
    public List<MovieDTO> selectNewMovieList(MovieDTO movieDTO);

    /**
     * 查询高分电影列表
     *
     * @param movieDTO 电影
     * @return 电影集合
     */
    public List<MovieDTO> selectHighMovieList(MovieDTO movieDTO);

    /**
     * 查询冷门电影列表
     *
     * @param movieDTO 电影
     * @return 电影集合
     */
    public List<MovieDTO> selectUnderratedMovieList(MovieDTO movieDTO);

    /**
     * 通过搜索框查询电影列表
     * 刘跃
     * @param movieDTO 电影
     * @return 电影集合
     */
    public List<MovieDTO> searchMovieList(MovieDTO movieDTO);
}
